home *** CD-ROM | disk | FTP | other *** search
- import kudzu
- import string
- from simpleconfig import SimpleConfigFile
-
- class Keyboard (SimpleConfigFile):
- # the *first* item in each of these wins conflicts
- console2xlist = [
- ("be-latin1" , ('pc102', 'be')),
- ("be2-latin1" , ('pc102', 'be')),
- ("bg" , ('pc102', 'bg')),
- ("cf" , ('pc102', 'cf')),
- ("cz-lat2" , ('pc102', 'cs')),
- ("cz-lat2-prog" , ('pc102', 'cs')),
- ("de-latin1" , ('pc102', 'de')),
- ("de" , ('pc102', 'de')),
- ("de-latin1-nodeadkeys" , ('pc102', 'de')),
- ("dk" , ('pc102', 'dk')),
- ("dk-latin1" , ('pc102', 'dk')),
- ("es" , ('pc102', 'es')),
- ("fi" , ('pc102', 'fi')),
- ("fi-latin1" , ('pc102', 'fi')),
- ("fr" , ('pc102', 'fr')),
- ("fr-latin0" , ('pc102', 'fr')),
- ("fr-latin1" , ('pc102', 'fr')),
- ("fr-pc" , ('pc102', 'fr')),
- ("fr_CH" , ('pc102', 'fr_CH')),
- ("fr_CH-latin1" , ('pc102', 'fr_CH')),
- ("hu" , ('pc102', 'fr_CH')),
- ("hu101" , ('pc102', 'hu')),
- ("it" , ('pc102', 'it')),
- ("it-ibm" , ('pc101', 'it')),
- ("it2" , ('pc102', 'it')),
- ("jp106" , ('jp106', 'jp')),
- ("no-latin1" , ('pc102', 'no')),
- ("no" , ('pc102', 'no')),
- ("pl" , ('pc102', 'pl')),
- ("pt-latin1" , ('pc102', 'pt')),
- ("ru" , ('pc102', 'ru')),
- ("ru-cp1251" , ('pc102', 'ru')),
- ("ru-ms" , ('microsoft', 'ru')),
- ("ru1" , ('pc102', 'ru')),
- ("ru2" , ('pc102', 'ru')),
- ("ru_win" , ('pc105', 'ru')),
- ("se-latin1" , ('pc102', 'se')),
- ("uk" , ('pc101', 'gb')),
- ("us" , ('pc101', 'us')),
- ]
-
- console2xsun = {
- "sun-pl-altgraph" : 'pl',
- "sun-pl" : 'pl',
- "sunt4-es" : 'es',
- "sunt5-cz-us" : 'cs',
- "sunt5-de-latin1" : 'de',
- "sunt5-es" : 'es',
- "sunt5-fi-latin1" : 'fi',
- "sunt5-fr-latin1" : 'fr',
- "sunt5-ru" : 'ru',
- "sunt5-uk" : 'en_US',
- "sunt5-us-cz" : 'cs',
- }
-
- console2x = {}
- for (console, (map, layout)) in console2xlist:
- console2x[console] = (map, layout)
-
- x2console = {}
- for (console, (map, layout)) in console2xlist:
- if not x2console.has_key((map, layout)):
- x2console [(map, layout)] = console
-
- xsun2console = {}
- for (key, value) in console2xsun.items():
- xsun2console [value] = key
-
-
- def __init__ (self):
- self.type = "PC"
- self.model = None
- self.layout = None
- self.info = {}
- list = kudzu.probe(kudzu.CLASS_KEYBOARD, kudzu.BUS_UNSPEC,
- kudzu.PROBE_ONE)
- if list:
- (device, module, desc) = list[0]
- if desc[:14] == 'Serial console':
- self.type = "Serial"
- elif desc[:8] == 'Sun Type':
- self.type = "Sun"
- if desc[8:9] == '4':
- self.model = 'type4'
- desc = desc[10:]
- elif desc[8:14] == '5 Euro':
- self.model = 'type5_euro'
- desc = desc[15:]
- elif desc[8:14] == '5 Unix':
- self.model = 'type5_unix'
- desc = desc[15:]
- else:
- self.model = 'type5'
- desc = desc[10:]
- if desc[:8] == 'Keyboard':
- self.layout = 'us'
- else:
- xx = string.split (desc)
- if xx[0] == 'fr_BE':
- self.layout = 'be'
- elif xx[0] == 'fr_CA':
- self.layout = 'fr'
- elif xx[0] == 'nl' or xx[0] == 'ko' or xx[0] == 'tw':
- self.layout = 'us'
- else:
- self.layout = xx[0]
- if self.type == "Sun":
- self.info["KEYBOARDTYPE"] = "sun"
- elif self.type != "Serial":
- self.info["KEYBOARDTYPE"] = "pc"
-
- def available (self):
- if self.type == "Sun":
- return [
- "sun-pl-altgraph",
- "sun-pl",
- "sundvorak",
- "sunkeymap",
- "sunt4-es",
- "sunt4-no-latin1",
- "sunt5-cz-us",
- "sunt5-de-latin1",
- "sunt5-es",
- "sunt5-fi-latin1",
- "sunt5-fr-latin1",
- "sunt5-ru",
- "sunt5-uk",
- "sunt5-us-cz",
- ]
- if self.type == "Serial":
- return [ "us" ]
- return [
- "azerty",
- "be-latin1",
- "be2-latin1",
- "fr-latin0",
- "fr-latin1",
- "fr-pc",
- "fr",
- "wangbe",
- "ANSI-dvorak",
- "dvorak-l",
- "dvorak-r",
- "dvorak",
- "pc-dvorak-latin1",
- "tr_f-latin5",
- "trf",
- "bg",
- "cf",
- "cz-lat2-prog",
- "cz-lat2",
- "defkeymap",
- "defkeymap_V1.0",
- "dk-latin1",
- "dk",
- "emacs",
- "emacs2",
- "es",
- "fi-latin1",
- "fi",
- "gr-pc",
- "gr",
- "hebrew",
- "hu101",
- "is-latin1",
- "it-ibm",
- "it",
- "it2",
- "jp106",
- "la-latin1",
- "lt",
- "lt.l4",
- "nl",
- "no-latin1",
- "no",
- "pc110",
- "pl",
- "pt-latin1",
- "pt-old",
- "ro",
- "ru-cp1251",
- "ru-ms",
- "ru-yawerty",
- "ru",
- "ru1",
- "ru2",
- "ru_win",
- "se-latin1",
- "sk-prog-qwerty",
- "sk-prog",
- "sk-qwerty",
- "tr_q-latin5",
- "tralt",
- "trf",
- "trq",
- "ua",
- "uk",
- "us",
- "croat",
- "cz-us-qwertz",
- "de-latin1-nodeadkeys",
- "de-latin1",
- "de",
- "fr_CH-latin1",
- "fr_CH",
- "hu",
- "sg-latin1-lk450",
- "sg-latin1",
- "sg",
- "sk-prog-qwertz",
- "sk-qwertz",
- "slovene",
- ]
-
- def set (self, keytable):
- if self.type != "Serial":
- self.info["KEYTABLE"] = keytable
-
- def setfromx (self, model, layout):
- if self.type == "PC":
- mapping = Keyboard.x2console
- else:
- mapping = Keyboard.xsun2console
-
- keys = mapping.keys ()
-
- fuzzy = None
- for key in keys:
- if type(key) == type(()):
- (mod, lay) = key
- else:
- mod = model
- lay = key;
- if model == mod and layout == lay:
- self.info["KEYTABLE"] = mapping[key]
- return
- if layout == lay:
- fuzzy = key
-
- if fuzzy:
- self.info["KEYTABLE"] = mapping[fuzzy]
- else:
- if self.type == "PC":
- self.info["KEYTABLE"] = "us"
- else:
- return "sunkeymap"
-
- def get (self):
- if self.info.has_key ("KEYTABLE"):
- return self.info["KEYTABLE"]
- else:
- if self.type == "Sun":
- for map in Keyboard.console2xsun.keys():
- if Keyboard.console2xsun[map] == self.layout:
- return map
- return "sunkeymap"
- else:
- return "us"
-
- def getXKB (self):
- if self.type == "PC":
- if Keyboard.console2x.has_key (self.get ()):
- (model, keylayout) = Keyboard.console2x[self.get ()]
- return ("xfree86", model, keylayout, "", "")
- else:
- if Keyboard.console2xsun.has_key (self.get ()):
- keylayout = Keyboard.console2xsun[self.get ()]
- return ("sun", self.model, keylayout, "", "")
-